/**
 * Create in 2012-4-17.
 */
package kit4j.common.task;

import java.util.concurrent.TimeUnit;

/**
 * 定时任务。该任务确保在指定的时间执行指定的任务。
 * 
 * @author MiniKnife
 * 
 */
public class TimeTask extends StepTask {

	/**
	 * 时间单元。
	 */
	private TimeUnit timeUnit;

	/**
	 * 开始执行前等待的时间时间单元数。
	 */
	private long initialDelay;

	/**
	 * 每一次执行之间延迟的时间单元数。
	 */
	private long delay;

	/**
	 * 创建一个定时任务。
	 * 
	 * @param stepTaskCallback
	 *            任务回调对象
	 */
	public TimeTask(StepTaskCallback stepTaskCallback) {
		super(stepTaskCallback);
		
		timeUnit = TimeUnit.SECONDS;
		initialDelay = 0;
		delay = 0;
	}

	/**
	 * @see kit4j.common.task.StepTask#doStart()
	 */
	@Override
	protected void doStart() {
		try {
			timeUnit.sleep(initialDelay);
			super.doStart();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * @see kit4j.common.task.StepTask#callback()
	 */
	@Override
	protected void callback() {
		super.callback();
		
		try {
			timeUnit.sleep(delay);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	/**
	 * @return the timeUnit
	 */
	public TimeUnit getTimeUnit() {
		return timeUnit;
	}

	/**
	 * @param timeUnit
	 *            the timeUnit to set
	 */
	public void setTimeUnit(TimeUnit timeUnit) {
		this.timeUnit = timeUnit;
	}

	/**
	 * @return the initialDelay
	 */
	public long getInitialDelay() {
		return initialDelay;
	}

	/**
	 * @param initialDelay
	 *            the initialDelay to set
	 */
	public void setInitialDelay(long initialDelay) {
		this.initialDelay = initialDelay;
	}

	/**
	 * @return the delay
	 */
	public long getDelay() {
		return delay;
	}

	/**
	 * @param delay
	 *            the delay to set
	 */
	public void setDelay(long delay) {
		this.delay = delay;
	}

}
